# 计算圆的面积
from tkinter.constants import PIESLICE

r1 = 10
r2 = 123
r3 = 34
r4 = 123

print(3.14 * r1 ** 2)
print(3.14 * r2 ** 2)
print(3.14 * r3 ** 2)
print(3.14 * r4 ** 2)


# 定义函数计算圆的面积
# 封装一个计算面积的函数
def mianji(r):
    PI = 3.14
    s = PI * r ** 2
    return s


# 调用函数，每一次调用函数都是把函数中的代码逻辑执行一遍
s = mianji(r1)
print(s)
print(mianji(r2))
print(mianji(r3))
print(mianji(r4))


# 空函数
def nop():
    # pass:占位符
    pass


# 函数的参数
# 1、必选参数,调用函数时必须要指定的参数
def sep(x):
    s = x ** 2
    return s


print(sep(100))


# 2、默认参数：参数有默认值，调用函数时如果不知道参数，函数执行过程中就使用默认值
def mianji(r, PI=3.14):
    s = PI * r ** 2
    return s


print(mianji(2))
# 指定默认参数
print(mianji(2, PI=3.14159))

# 默认参数的使用，指定参数名称赋值
print(1, 2, 3, 3, 4, 5, sep=",")


# 使用列表作为参数
def sum(nums):
    s = 0
    for num in nums:
        s += num
    return s


print(sum([1, 2, 3, 4]))


# 3、可变参数,可以传入任意多个参数
# 可变参数后面有普通参数时，调用函数需要指定参数名
def sum1(*nums):
    print(nums, type(nums))
    s = 0
    for num in nums:
        s += num
    return s


print(sum1(1, 2, 3, 4, 1, 2, 2, 3, 3))


# 4、关键字参数
def person(name, age, sex, **info):
    print(name, age, sex, info)

    # 先判断才能使用
    if "clazz" in info:
        print(info["clazz"])


person("张三", 23, "男")
# 在调用函数时，后面的关键字参数会组合成一个字典
person("张三", 23, "男", clazz="文科一班", id="10001")

#  参数类型问题
person("张三", "23", "男")


# 增加类型的限制
def mianji(r: int):
    PI = 3.14
    s = PI * r ** 2
    return s

print(mianji(100))
